题目描述
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的数字可以无限制重复被选取。
说明:
所有数字(包括 target)都是正整数。
解集不能包含重复的组合。
示例 1:
1 | 输入: candidates = [2,3,6,7], target = 7, |
示例 2:
1 | 输入: candidates = [2,3,5], target = 8, |
这道题是一个回溯法中变形的组合类的题,变形的地方在于,可以取重复的数字。
递归结构
递归边界
1 | if f(n) == target: |
递归参数
- start:开始位置
- result: 单次递归结果
- result_all:最终结果
- candidates
- target
剪枝
本题需要进行剪枝:
- 第一个是对candidates进行一个排序,这样当判断:
1
f(n) = f(n-1) + num > target
这时候,这个num后面的数字由于经过排序,必然加起来也是大于target的,所以直接break就可以了。
答案
1 | class Solution(object): |